package com.grape.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.grape.domain.Bill;
import com.grape.dto.*;
import com.grape.req.StatisticYearMonthReq;
import com.grape.vo.BaseVo;
import com.grape.vo.DailyVO;

import java.util.List;

/**
 *
 * 账单表 服务类
 *
 * @author      putao
 * @email       2628279194@qq.com
 */
public interface IBillService extends IService<Bill>, BaseService<Bill> {

    /**
     * 分页
     * @param       baseVo 统一分页对象
     * @return      账单表集合
     */
    List<Bill> listData(BaseVo baseVo);

    /**
     * 自定义分页
     * @param   baseVo      统一分页对象
     */
    void pageListCustom(BaseVo baseVo);

    /**
     * 修改
     * @param bill 账单表对象
     */
    void updateData(Bill bill);

    /**
     * 新增
     * @param       bill 账单表对象
     * @return      账单表对象
     */
    Bill insertData(Bill bill);

    /**
     * 删除
     * @param id    单据id
     * @return      删除条数
     */
    int deleteData(String id);

    /**
     * 根据id查询详情
     * @param id    单据id
     * @return      账单表对象
     */
    Bill detail(String id);

    /**
     * 统计支出
     * @param startDay  开始时间
     * @param endDay    结束时间
     * @return  支出统计信息
     */
    List<LineDTO> getTotal(String startDay, String endDay);

    /**
     * 按天查询统计账单
     * @param dailyVO   时间
     * @return 统计账单
     */
    List<DailyDTO> dailyDTOList(DailyVO dailyVO);


    /**
     * 获取当前月统计账单
     * @param accountBookId 账本id
     * @return 月份统计信息
     */
    StatisticalCurrentMonthDTO getCurrentMonthStatistical(String accountBookId);

    /**
     * 获取前6个月统计数据
     * @param accountBookId 账本id
     * @param type  类型（pay: 支出，income：收入）
     * @return 统计数据
     */
    StatisticalMonthChartDTO statisticMonthChart(String accountBookId, String type);

    /**
     * 获取指定年月的统计数据
     * @param statisticYearMonthReq 账本id，月份，年份，类型
     * @return 统计数据
     */
    StatisticalMonthDTO statisticByYearMonth(StatisticYearMonthReq statisticYearMonthReq);
}

